from django.db import models


class BookInfoManager(models.Manager):
    """自定义模型管理器"""
    def all(self):
        return super().filter(is_delete=False)


class BookInfo(models.Model):
    # 定义模型类

    btitle = models.CharField(max_length=20, verbose_name='名称')
    bpub_date = models.DateField(verbose_name='发布日期')
    bread = models.IntegerField(default=0, verbose_name='阅读量')
    bcomment = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    # 如果模型已迁移建表,并且表中已经有数据时,后追加的新字段必须给默认值或允许为null,不然就报错
    image = models.ImageField(upload_to='booktest', verbose_name='图片', null=True)
    # heroinfo_set  方便关联查询,ORM隐式生成字段
    # books = BookInfoManager()  # 使用模型自定义管理器
    # objects = BookInfoManager()  # 使用模型自定义管理器

    class Meta:  # 元类 当前模型类中的元类作用是为了修改模型配置  type: 道生元,元生类,类生万象,道道有道
        db_table = 'tb_books'  # 指定迁移建表时,表的名字
        verbose_name = '图书'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.btitle



#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'female'),
        (1, 'male')
    )
    hname = models.CharField(max_length=20, verbose_name='名称')
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.hname
